<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta content="Cask Data, Inc." name="author" />
<meta content="Copyright © 2016-2017 Cask Data, Inc." name="copyright" />


    <meta name="git_release" content="6.1.1">
    <meta name="git_hash" content="05fbac36f9f7aadeb44f5728cea35136dbc243e5">
    <meta name="git_timestamp" content="2020-02-09 08:22:47 +0800">
    <title>Plugin Management</title>

    <link rel="stylesheet" href="../_static/cdap-bootstrap.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="../_static/bootstrap-3.3.6/css/bootstrap.min.css" type="text/css" />
    <link rel="stylesheet" href="../_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/bootstrap-sphinx.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/cdap-dynamicscrollspy-4.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/jquery.mCustomScrollbar.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/cdap-jquery.mCustomScrollbar.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/abixTreeList-2.css" type="text/css" />
    <link rel="stylesheet" href="../_static/cdap-bootstrap.css" type="text/css" />

    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '6.1.1',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  false
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/language_data.js"></script>

    <link rel="shortcut icon" href="../_static/favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="top" title="Cask Data Application Platform 6.1.1 Documentation" href="../index.html" />
    <link rel="up" title="CDAP Pipelines" href="index.html" />
    <link rel="next" title="Plugin Reference" href="plugins/index.html" />
    <link rel="prev" title="Running Pipelines" href="running-pipelines.html" />
    <!-- block extrahead -->
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <!-- block extrahead end -->

</head>
<body role="document">

<!-- block navbar -->
<div id="navbar" class="navbar navbar-inverse navbar-default navbar-fixed-top">
    <div class="container-fluid">
      <div class="row">
        <div class="navbar-header">
          <!-- .btn-navbar is used as the toggle for collapsed navbar content -->
          <a class="navbar-brand" href="../table-of-contents/../../index.html">
            <span><img alt="CDAP logo" src="../_static/cdap_logo.svg"/></span>
          </a>

          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>

          <div class="pull-right">
            <div class="dropdown version-dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown"
                role="button" aria-haspopup="true" aria-expanded="false">
                v 6.1.1 <span class="caret"></span>
              </a>
              <ul class="dropdown-menu">
                <li><a href="//docs.cdap.io/cdap/5.1.2/en/index.html">v 5.1.2</a></li>
                <li><a href="//docs.cdap.io/cdap/4.3.4/en/index.html">v 4.3.4</a></li>
              </ul>
            </div>
          </div>
          <form class="navbar-form navbar-right navbar-search" action="../search.html" method="get">
            <div class="form-group">
              <div class="navbar-search-image material-icons"></div>
              <input type="text" name="q" class="form-control" placeholder="  Search" />
            </div>
            <input type="hidden" name="check_keywords" value="yes" />
            <input type="hidden" name="area" value="default" />
          </form>

          <div class="collapse navbar-collapse nav-collapse navbar-right navbar-navigation">
            <ul class="nav navbar-nav"><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../index.html">简介</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link current" href="../table-of-contents/../../guides.html">手册</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../reference-manual/index.html">参考</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../faqs/index.html">帮助</a></li>
            </ul>
          </div>

        </div>
      </div>
    </div>
  </div><!-- block navbar end -->
<!-- block main content -->
<div class="main-container container">
  <div class="row"><div class="col-md-2">
      <div id="sidebar" class="bs-sidenav scrollable-y-outside" role="complementary">
<!-- theme_manual: developer-manual -->
<!-- theme_manual_highlight: guides -->
<!-- sidebar_title_link: ../table-of-contents/../../guides.html -->

  <div role="note" aria-label="manuals links"><h3><a href="../table-of-contents/../../guides.html">Guides</a></h3>

    <ul class="this-page-menu">
      <li class="toctree-l1"><a href="../table-of-contents/../../user-guide/index.html" rel="nofollow">用户手册</a>
      </li>
      <li class="toctree-l1"><b><a href="../table-of-contents/../../developer-manual/index.html" rel="nofollow">开发手册</a></b>
      <nav class="pagenav">
      <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html"> 简介</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-started/index.html"> 入门指南</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../getting-started/sandbox/index.html">CDAP Sandbox</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../getting-started/sandbox/zip.html">二进制 Zip 文件</a></li>
<li class="toctree-l3"><a class="reference internal" href="../getting-started/sandbox/zip.html#cdap-sandbox">启动和停止 CDAP Sandbox</a></li>
<li class="toctree-l3"><a class="reference internal" href="../getting-started/sandbox/virtual-machine.html">虚拟机镜像</a></li>
<li class="toctree-l3"><a class="reference internal" href="../getting-started/sandbox/docker.html">Docker 镜像</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../getting-started/quick-start.html">快速入门</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting-started/dev-env.html">搭建开发环境</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting-started/start-stop-cdap.html">启动和停止 CDAP</a></li>
<li class="toctree-l2"><a class="reference internal" href="../getting-started/building-apps.html">构建并运行应用</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../overview/index.html"> 概述</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../overview/anatomy.html"> 大数据应用剖析</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/modes.html"> 模式和组件</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/abstractions.html"> 核心概念</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/interfaces.html"> 编程接口</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../building-blocks/index.html"> 抽象概念</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/core.html"> Core Abstractions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/applications.html"> Applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/datasets/index.html"> Datasets</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/overview.html"> Overview</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/table.html"> Table API</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/fileset.html"> FileSets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/partitioned-fileset.html"> Partitioned FileSets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/time-partitioned-fileset.html"> TimePartitioned FileSets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/system-custom.html"> System and Custom Datasets</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/permissions.html"> Dataset Permissions</a></li>
<li class="toctree-l3"><a class="reference internal" href="../building-blocks/datasets/cube.html"> Cube Dataset</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/mapreduce-programs.html"> MapReduce Programs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/plugins.html"> Plugins</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/schedules.html"> Schedules</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/secure-keys.html"> Secure Keys</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/services.html"> Services</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/spark-programs.html"> Spark Programs</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/workers.html"> Workers</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/workflows.html"> Workflows</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/artifacts.html"> Artifacts</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/program-lifecycle.html"> Program Lifecycle</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/namespaces.html"> Namespaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/transaction-system.html"> Transaction System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../building-blocks/transactional-messaging-system.html"> Transactional Messaging System</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../metadata/index.html"> 元数据</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../metadata/system-metadata.html"> System Metadata</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metadata/discovery-lineage.html"> Discovery and Lineage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metadata/field-lineage.html"> Field Level Lineage</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metadata/audit-logging.html"> Audit Logging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metadata/metadata-ui.html"> CDAP Metadata UI</a></li>
<li class="toctree-l2"><a class="reference internal" href="../metadata/programmatic-metadata.html"> Accessing metadata programmatically</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html"> 数据流管道</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="concepts-design.html"> Concepts and Design</a></li>
<li class="toctree-l2"><a class="reference internal" href="getting-started.html"> Getting Started</a></li>
<li class="toctree-l2"><a class="reference internal" href="studio.html"> CDAP Studio</a></li>
<li class="toctree-l2"><a class="reference internal" href="creating-pipelines.html"> Creating Pipelines</a></li>
<li class="toctree-l2"><a class="reference internal" href="running-pipelines.html"> Running Pipelines</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#"> Plugin Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="plugins/index.html"> Plugin Reference</a><ul>
<li class="toctree-l3"><a class="reference internal" href="plugins/actions/index.html"> Action Plugins</a><ul class="simple">
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/sources/index.html"> Source Plugins</a><ul class="simple">
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/transforms/index.html"> Transform Plugins</a><ul class="simple">
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/analytics/index.html"> Analytic Plugins</a><ul class="simple">
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/sinks/index.html"> Sink Plugins</a><ul class="simple">
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/shared-plugins/index.html"> Shared Plugins</a><ul>
<li class="toctree-l4"><a class="reference internal" href="plugins/shared-plugins/core.html">CoreValidator</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="plugins/post-run-plugins/index.html"> Post-run Plugins</a><ul class="simple">
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="developing-pipelines.html"> Developing Pipelines</a></li>
<li class="toctree-l2"><a class="reference internal" href="developing-plugins/index.html"> Developing Plugins</a><ul>
<li class="toctree-l3"><a class="reference internal" href="developing-plugins/plugin-basics.html">Plugin Basics</a></li>
<li class="toctree-l3"><a class="reference internal" href="developing-plugins/creating-a-plugin.html">Creating a Plugin</a></li>
<li class="toctree-l3"><a class="reference internal" href="developing-plugins/presentation-plugins.html">Plugin Presentation</a></li>
<li class="toctree-l3"><a class="reference internal" href="developing-plugins/testing-plugins.html">Testing Plugins</a></li>
<li class="toctree-l3"><a class="reference internal" href="developing-plugins/packaging-plugins.html">Packaging Plugins</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="how-cdap-pipelines-work.html"> How CDAP Pipelines Work</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../cloud-runtimes/index.html"> 云平台运行</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../cloud-runtimes/concepts/index.html"> Concepts</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cloud-runtimes/provisioners/index.html"> Provisioners</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/provisioners/gcp-dataproc.html">Google Dataproc</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/provisioners/aws-emr.html">Amazon Elastic MapReduce</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/provisioners/remote-hadoop.html">Remote Hadoop</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../cloud-runtimes/profiles/index.html"> Profiles</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/profiles/creating-profiles.html">Creating Profiles</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/profiles/assigning-profiles.html">Assigning Profiles</a></li>
<li class="toctree-l3"><a class="reference internal" href="../cloud-runtimes/profiles/admin-controls.html">Admin Controls</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../cloud-runtimes/example/index.html"> Example</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../security/index.html"> 安全</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../security/client-authentication.html">Client Authentication</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/cdap-authentication-clients-java.html">CDAP Authentication Client for Java</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/cdap-authentication-clients-python.html">CDAP Authentication Client for Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/custom-authentication.html">Custom Authentication</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/authorization-extensions.html">Authorization Extensions</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../testing/index.html"> 测试和调试</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../testing/testing.html"> Testing a CDAP Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="../testing/debugging.html"> Debugging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../testing/troubleshooting.html"> Troubleshooting</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../ingesting-tools/index.html"> 数据融合</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../ingesting-tools/cdap-stream-clients-java.html">CDAP Stream Client for Java</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ingesting-tools/cdap-stream-clients-python.html">CDAP Stream Client for Python</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ingesting-tools/cdap-stream-clients-ruby.html">CDAP Stream Client for Ruby</a></li>
<li class="toctree-l2"><a class="reference internal" href="../ingesting-tools/cdap-flume.html">CDAP Flume</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../data-exploration/index.html"> 数据探索</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../data-exploration/filesets.html"> Fileset Exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../data-exploration/tables.html"> Table Exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../data-exploration/object-mapped-tables.html"> ObjectMappedTable Exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../data-exploration/custom-datasets.html"> Custom Dataset Exploration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../data-exploration/hive-execution-engines.html"> Hive Execution Engines</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../advanced/index.html"> 高级主题</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../advanced/application-logback.html"> Application Logback</a></li>
<li class="toctree-l2"><a class="reference internal" href="../advanced/best-practices.html"> Best Practices</a></li>
<li class="toctree-l2"><a class="reference internal" href="../advanced/class-loading.html"> Class Loading</a></li>
<li class="toctree-l2"><a class="reference internal" href="../advanced/configuring-resources.html"> Configuring Program Resources</a></li>
<li class="toctree-l2"><a class="reference internal" href="../advanced/program-retry-policies.html"> Program Retry Policies</a></li>
</ul>
</li>
</ul>
</nav>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../admin-manual/index.html" rel="nofollow">管理手册</a>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../integrations/index.html" rel="nofollow">集成手册</a>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../examples-manual/index.html" rel="nofollow">最佳实践</a>
      </li>
    </ul>
  </div></div>
    </div><div class="col-md-8 content" id="main-content">
    
  <div class="section" id="plugin-management">
<span id="cdap-pipelines-plugin-management"></span><h1>Plugin Management<a class="headerlink" href="#plugin-management" title="Permalink to this headline">🔗</a></h1>
<p>This section covers how to mange the deployment of plugins on your system:</p>
<ul class="simple">
<li><a class="reference internal" href="#cdap-pipelines-plugin-management-deployment"><span class="std std-ref">Plugin Deployment:</span></a> deploying as
either a system or user <em>artifact</em></li>
<li><a class="reference internal" href="../building-blocks/plugins.html#plugins-deployment-verification"><span class="std std-ref">Deployment Verification:</span></a> verifying that an
artifact was deployed successfully</li>
<li><a class="reference internal" href="#cdap-pipelines-plugin-management-third-party-plugins"><span class="std std-ref">Deploying Third-party JARs:</span></a>
making JDBC drivers and other artifacts available to applications</li>
<li><a class="reference internal" href="#cdap-pipelines-plugin-management-multiple-versions"><span class="std std-ref">Managing Multiple Version:</span></a>
different versions can co-exist and be available at the same time</li>
<li><a class="reference internal" href="#cdap-pipelines-plugin-management-deleting-plugins"><span class="std std-ref">Deleting Plugins:</span></a> removing
deployed artifacts from CDAP</li>
</ul>
<p>If you are creating your own plugins, see the section on <a class="reference internal" href="developing-plugins/index.html#cdap-pipelines-developing-plugins"><span class="std std-ref">developing plugins</span></a> for information on writing plugins, including
<a class="reference internal" href="developing-plugins/packaging-plugins.html#cdap-pipelines-packaging-plugins-packaging"><span class="std std-ref">packaging plugins in a JAR</span></a> and
their <a class="reference internal" href="developing-plugins/presentation-plugins.html#cdap-pipelines-packaging-plugins-presentation"><span class="std std-ref">presentation in a UI</span></a>
such as the CDAP Studio.</p>
<p>If you are installing a <strong>third-party JAR</strong> (such as a <strong>JDBC driver</strong>) to make it
accessible to other plugins or applications, see <a class="reference internal" href="#cdap-pipelines-plugin-management-third-party-plugins"><span class="std std-ref">these instructions</span></a>.</p>
<div class="section" id="available-plugins">
<h2>Available Plugins<a class="headerlink" href="#available-plugins" title="Permalink to this headline">🔗</a></h2>
<p>Plugins available with CDAP are listed beginning on a <a class="reference internal" href="plugins/index.html#cdap-pipelines-plugins"><span class="std std-ref">separate reference page</span></a>.
User-installed plugins are not listed there, but if they are installed correctly, the reference
documentation for the plugin will be available through the <a class="reference internal" href="studio.html#cdap-studio"><span class="std std-ref">CDAP Studio</span></a>.</p>
</div>
<div class="section" id="deploying-plugins">
<span id="cdap-pipelines-plugin-management-deployment"></span><h2>Deploying Plugins<a class="headerlink" href="#deploying-plugins" title="Permalink to this headline">🔗</a></h2>
<p>To make plugins available to another artifact (and thus available to any application
created from one of the artifacts), the plugins must first be packaged in a JAR file.
After that, the JAR file must be deployed either as a <a class="reference internal" href="../building-blocks/plugins.html#plugins-deployment-system"><span class="std std-ref">system artifact</span></a> or a <a class="reference internal" href="../building-blocks/plugins.html#plugins-deployment-user"><span class="std std-ref">user artifact</span></a>.</p>
<p>A system artifact is available to users across any namespace. A user artifact is available
only to users in the namespace to which it is deployed. By design, deploying as a user
artifact just requires access to the <span class="xref std std-ref">Artifact HTTP RESTful API</span>,
while deploying as a system artifact requires access to the filesystem of the CDAP Master.
This then requires administrator access and permission.</p>
<div class="section" id="deploying-as-a-system-artifact">
<span id="cdap-pipelines-plugin-management-deployment-deploying-as-a-system-artifact"></span><h3>Deploying as a System Artifact<a class="headerlink" href="#deploying-as-a-system-artifact" title="Permalink to this headline">🔗</a></h3>
<p>To deploy the artifact as a system artifact, both the JAR file and a matching configuration file
must be placed in the appropriate directory.</p>
<ul class="simple">
<li><strong>CDAP Sandbox:</strong> <code class="docutils literal notranslate"><span class="pre">$CDAP_INSTALL_DIR/artifacts</span></code></li>
<li><strong>Distributed CDAP:</strong> The plugin JARs should be placed in the local file system and the path
can be provided to CDAP by setting the property <code class="docutils literal notranslate"><span class="pre">app.artifact.dir</span></code> in
<span class="xref std std-ref">cdap-site.xml</span>. Multiple directories can be defined by separating
them with a semicolon. The default path is <code class="docutils literal notranslate"><span class="pre">/opt/cdap/master/artifacts</span></code>.</li>
</ul>
<p>For each plugin JAR, there must also be a corresponding configuration file to specify which artifacts
can use the plugins. The file name must match the name of the JAR, except it must have the <code class="docutils literal notranslate"><span class="pre">.json</span></code>
extension instead of the <code class="docutils literal notranslate"><span class="pre">.jar</span></code> extension. For example, if your JAR file is named
<code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.jar</span></code>, there must be a corresponding <code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.json</span></code> file.
If your <code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.jar</span></code> contains transforms that can be used by both the <code class="docutils literal notranslate"><span class="pre">cdap-data-pipeline</span></code>
and <code class="docutils literal notranslate"><span class="pre">cdap-data-streams</span></code> artifacts, <code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.json</span></code> would contain:</p>
<div class="highlight container">
<pre class="literal-block">
{
  &quot;parents&quot;: [ &quot;cdap-data-pipeline[6.1.1,6.1.1]&quot;, &quot;cdap-data-streams[6.1.1,6.1.1]&quot; ]
}
</pre>
</div>
<p>This file specifies that the plugins in <code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.jar</span></code> can be used by version 6.1.1 of
the <code class="docutils literal notranslate"><span class="pre">cdap-data-pipeline</span></code> and <code class="docutils literal notranslate"><span class="pre">cdap-data-streams</span></code> artifacts. You can also specify a wider range of versions
that can use the plugins, with square brackets <code class="docutils literal notranslate"><span class="pre">[</span> <span class="pre">]</span></code> indicating an inclusive version and parentheses <code class="docutils literal notranslate"><span class="pre">(</span> <span class="pre">)</span></code> indicating
an exclusive version. For example:</p>
<div class="highlight container">
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
  <span class="nt">&quot;parents&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;cdap-data-pipeline[3.5.0,4.0.0)&quot;</span><span class="p">,</span> <span class="s2">&quot;cdap-data-streams[3.5.0,4.0.0)&quot;</span> <span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>specifies that these plugins can be used by versions 3.5.0 (inclusive) to 4.0.0 (exclusive) of the
<code class="docutils literal notranslate"><span class="pre">cdap-data-pipeline</span></code> and <code class="docutils literal notranslate"><span class="pre">cdap-data-streams</span></code> artifacts.</p>
<p>If the artifact contains third-party plugins, you can explicitly list them in the config file.
For example, you may want to deploy a JDBC driver contained in a third-party JAR. In these cases,
you have no control over the code to annotate the classes that should be plugins, so you need to
list them in the configuration:</p>
<div class="highlight container">
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
  <span class="nt">&quot;parents&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&quot;cdap-data-pipeline[3.5.0,4.0.0)&quot;</span><span class="p">,</span> <span class="s2">&quot;cdap-data-streams[3.5.0,4.0.0)&quot;</span> <span class="p">],</span>
  <span class="nt">&quot;plugins&quot;</span><span class="p">:</span> <span class="p">[</span>
    <span class="p">{</span>
      <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;mysql&quot;</span><span class="p">,</span>
      <span class="nt">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;jdbc&quot;</span><span class="p">,</span>
      <span class="nt">&quot;className&quot;</span><span class="p">:</span> <span class="s2">&quot;com.mysql.jdbc.Driver&quot;</span>
    <span class="p">}</span>
  <span class="p">]</span>
<span class="p">}</span>
</pre></div>
</div>
</div>
<p>Once your JARs and matching configuration files are in place, a CDAP CLI command (<code class="docutils literal notranslate"><span class="pre">load</span> <span class="pre">artifact</span></code>) or
a HTTP RESTful API call to <span class="xref std std-ref">load system artifacts</span>
can be made to load the artifacts. As described in the documentation on <a class="reference internal" href="../building-blocks/artifacts.html#artifacts"><span class="std std-ref">Artifacts</span></a>, only
snapshot artifacts can be re-deployed without requiring that they first be deleted.</p>
<p>Alternatively, the CDAP Sandbox should be restarted for this change to take effect in local sandbox
mode, and <code class="docutils literal notranslate"><span class="pre">cdap-master</span></code> services should be restarted in the Distributed mode.</p>
</div>
<div class="section" id="deploying-as-a-user-artifact">
<h3>Deploying as a User Artifact<a class="headerlink" href="#deploying-as-a-user-artifact" title="Permalink to this headline">🔗</a></h3>
<p>To deploy the artifact as a user artifact, use the <span class="xref std std-ref">Artifact HTTP RESTful API</span> <em>Add Artifact</em> or the CLI.</p>
<p>When using the HTTP RESTful API, you will need to specify the <code class="docutils literal notranslate"><span class="pre">Artifact-Extends</span></code> header.
Unless the artifact’s version is defined in the manifest file of the JAR file you upload,
you will also need to specify the <code class="docutils literal notranslate"><span class="pre">Artifact-Version</span></code> header.</p>
<p>When using the CLI, a configuration file exactly like the one described in the
<a class="reference internal" href="../building-blocks/plugins.html#plugins-deployment-system"><span class="std std-ref">Deploying as a System Artifact</span></a> must be used.</p>
<p>For example, to deploy <code class="docutils literal notranslate"><span class="pre">custom-transforms-1.0.0.jar</span></code> using the RESTful API:</p>

<script type="text/javascript">

  $(function tabbedparsedliteral60() {
    var tabs = ['linux', 'windows'];
    var mapping = {'windows': 'windows', 'linux': 'linux'};
    var tabSetID = 'linux-windows';
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral60 .example-tab-" + tab).click(changeExampleTab(tab, mapping, "tabbedparsedliteral60", tabSetID));
    }
  });

</script>
<div id="tabbedparsedliteral60" class="tabbed-parsed-literal dependent-linux-windows">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-linux active"><a href="#">Linux</a></li>
<li class="example-tab example-tab-windows "><a href="#">Windows</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-linux active">
<div class="code code-tab">
<div class="highlight-console">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">$</span> curl -w<span class="s2">&quot;\n&quot;</span> -X POST <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/custom-transforms&quot;</span> <span class="se">\</span>
-H <span class="s2">&quot;Artifact-Extends: system:cdap-data-pipeline[6.1.1, 6.1.1]/system:cdap-data-streams[6.1.1, 6.1.1]&quot;</span> <span class="se">\</span>
--data-binary @/path/to/custom-transforms-1.0.0.jar</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
<div class="tab-pane tab-pane-windows ">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">&gt;</span> curl -X POST <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/custom-transforms&quot;</span> ^
<span class="go">-H &quot;Artifact-Extends: system:cdap-data-pipeline[6.1.1, 6.1.1]/system:cdap-data-streams[6.1.1, 6.1.1]&quot; ^</span>
<span class="go">--data-binary @/path/to/custom-transforms-1.0.0.jar</span></span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>Using the CLI:</p>

<script type="text/javascript">

  function change_tabbedparsedliteral61_ExampleTab(tab) {
    return function(e) {
      e.preventDefault();
      var scrollOffset = $(this).offset().top - $(document).scrollTop();
      $("#tabbedparsedliteral61 .tab-pane").removeClass("active");
      $("#tabbedparsedliteral61 .tab-pane-" + tab).addClass("active");
      $("#tabbedparsedliteral61 .example-tab").removeClass("active");
      $("#tabbedparsedliteral61 .example-tab-" + tab).addClass("active");
      $(document).scrollTop($(this).offset().top - scrollOffset);
    }
  }

  $(function() {
    var tabs = ['cdap-cli'];
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral61 .example-tab-" + tab).click(change_tabbedparsedliteral61_ExampleTab(tab));
    }
  });

</script>
<div id="tabbedparsedliteral61" class="tabbed-parsed-literal independent">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-cdap-cli active"><a href="#">CDAP CLI</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-cdap-cli active">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="go">cdap &gt; load artifact /path/to/custom-transforms-1.0.0.jar config-file /path/to/config.json</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>where <code class="docutils literal notranslate"><span class="pre">config.json</span></code> contains:</p>
<div class="highlight container">
<pre class="literal-block">
{
  &quot;parents&quot;: [ &quot;system:cdap-data-pipeline[6.1.1,6.1.1]&quot;, &quot;system:cdap-data-streams[6.1.1,6.1.1]&quot; ]
}
</pre>
</div>
<p>Note that when deploying a user artifact that extends a system artifact,
you must prefix the parent artifact name with <code class="docutils literal notranslate"><span class="pre">'system:'</span></code>.
This is in the event there is a user artifact with the same name as the system artifact.
If you are extending a user artifact, no prefix is required.</p>
<p>You can deploy third-party JARs in the same way except the plugin information needs
<a class="reference internal" href="../building-blocks/plugins.html#plugins-third-party"><span class="std std-ref">to be explicitly listed</span></a>. As described in the documentation on
<a class="reference internal" href="../building-blocks/artifacts.html#artifacts"><span class="std std-ref">Artifacts</span></a>, only snapshot artifacts can be re-deployed without requiring that they
first be deleted.</p>
<p>Using the RESTful API (note that if the artifact version is not in the JAR manifest file,
it needs to be set explicitly, as the JAR contents are uploaded without the filename):</p>

<script type="text/javascript">

  $(function tabbedparsedliteral62() {
    var tabs = ['linux', 'windows'];
    var mapping = {'windows': 'windows', 'linux': 'linux'};
    var tabSetID = 'linux-windows';
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral62 .example-tab-" + tab).click(changeExampleTab(tab, mapping, "tabbedparsedliteral62", tabSetID));
    }
  });

</script>
<div id="tabbedparsedliteral62" class="tabbed-parsed-literal dependent-linux-windows">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-linux active"><a href="#">Linux</a></li>
<li class="example-tab example-tab-windows "><a href="#">Windows</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-linux active">
<div class="code code-tab">
<div class="highlight-console">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">$</span> curl -w<span class="s2">&quot;\n&quot;</span> -X POST <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/mysql-connector-java&quot;</span> <span class="se">\</span>
-H <span class="s1">&#39;Artifact-Plugins: [ { &quot;name&quot;: &quot;mysql&quot;, &quot;type&quot;: &quot;jdbc&quot;, &quot;className&quot;: &quot;com.mysql.jdbc.Driver&quot; } ]&#39;</span> <span class="se">\</span>
-H <span class="s2">&quot;Artifact-Version: 5.1.35&quot;</span> <span class="se">\</span>
-H <span class="s2">&quot;Artifact-Extends: system:cdap-data-pipeline[6.1.1, 6.1.1]/system:cdap-data-streams[6.1.1, 6.1.1]&quot;</span> <span class="se">\</span>
--data-binary @mysql-connector-java-5.1.35.jar</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
<div class="tab-pane tab-pane-windows ">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">&gt;</span> curl -X POST <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/mysql-connector-java&quot;</span> ^
<span class="go">-H &quot;Artifact-Plugins: [ { \&quot;name\&quot;: \&quot;mysql\&quot;, \&quot;type\&quot;: \&quot;jdbc\&quot;, \&quot;className\&quot;: \&quot;com.mysql.jdbc.Driver\&quot; } ]&quot; ^</span>
<span class="go">-H &quot;Artifact-Version: 5.1.35&quot; ^</span>
<span class="go">-H &quot;Artifact-Extends: system:cdap-data-pipeline[6.1.1, 6.1.1]/system:cdap-data-streams[6.1.1, 6.1.1]&quot; ^</span>
<span class="go">--data-binary @mysql-connector-java-5.1.35.jar</span></span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>Using the CLI (note that the artifact version, if not explicitly set, is derived from the JAR filename):</p>

<script type="text/javascript">

  function change_tabbedparsedliteral63_ExampleTab(tab) {
    return function(e) {
      e.preventDefault();
      var scrollOffset = $(this).offset().top - $(document).scrollTop();
      $("#tabbedparsedliteral63 .tab-pane").removeClass("active");
      $("#tabbedparsedliteral63 .tab-pane-" + tab).addClass("active");
      $("#tabbedparsedliteral63 .example-tab").removeClass("active");
      $("#tabbedparsedliteral63 .example-tab-" + tab).addClass("active");
      $(document).scrollTop($(this).offset().top - scrollOffset);
    }
  }

  $(function() {
    var tabs = ['cdap-cli'];
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral63 .example-tab-" + tab).click(change_tabbedparsedliteral63_ExampleTab(tab));
    }
  });

</script>
<div id="tabbedparsedliteral63" class="tabbed-parsed-literal independent">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-cdap-cli active"><a href="#">CDAP CLI</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-cdap-cli active">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="go">cdap &gt; load artifact /path/to/mysql-connector-java-5.1.35.jar config-file /path/to/config.json</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>where <code class="docutils literal notranslate"><span class="pre">config.json</span></code> contains:</p>
<div class="highlight container">
<pre class="literal-block">
{
  &quot;parents&quot;: [ &quot;system:cdap-data-pipeline[6.1.1,6.1.1]&quot;, &quot;system:cdap-data-streams[6.1.1,6.1.1]&quot; ],
  &quot;plugins&quot;: [
    {
      &quot;name&quot;: &quot;mysql&quot;,
      &quot;type&quot;: &quot;jdbc&quot;,
      &quot;className&quot;: &quot;com.mysql.jdbc.Driver&quot;
    }
  ]
}
</pre>
</div>
</div>
<div class="section" id="deployment-verification">
<h3>Deployment Verification<a class="headerlink" href="#deployment-verification" title="Permalink to this headline">🔗</a></h3>
<p>You can verify that a plugin artifact was added successfully by using the
<span class="xref std std-ref">Artifact HTTP RESTful API</span> to retrieve artifact details.
For example, to retrieve detail about our <code class="docutils literal notranslate"><span class="pre">custom-transforms</span></code> artifact:</p>

<script type="text/javascript">

  $(function tabbedparsedliteral64() {
    var tabs = ['linux', 'windows'];
    var mapping = {'windows': 'windows', 'linux': 'linux'};
    var tabSetID = 'linux-windows';
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral64 .example-tab-" + tab).click(changeExampleTab(tab, mapping, "tabbedparsedliteral64", tabSetID));
    }
  });

</script>
<div id="tabbedparsedliteral64" class="tabbed-parsed-literal dependent-linux-windows">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-linux active"><a href="#">Linux</a></li>
<li class="example-tab example-tab-windows "><a href="#">Windows</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-linux active">
<div class="code code-tab">
<div class="highlight-console">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">$</span> curl -w<span class="s2">&quot;\n&quot;</span> -X GET <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/custom-transforms/versions/1.0.0?scope=[system | user]</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
<div class="tab-pane tab-pane-windows ">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">&gt;</span> curl -X GET <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/custom-transforms/versions/1.0.0?scope=[system | user]</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>Using the CLI:</p>

<script type="text/javascript">

  function change_tabbedparsedliteral65_ExampleTab(tab) {
    return function(e) {
      e.preventDefault();
      var scrollOffset = $(this).offset().top - $(document).scrollTop();
      $("#tabbedparsedliteral65 .tab-pane").removeClass("active");
      $("#tabbedparsedliteral65 .tab-pane-" + tab).addClass("active");
      $("#tabbedparsedliteral65 .example-tab").removeClass("active");
      $("#tabbedparsedliteral65 .example-tab-" + tab).addClass("active");
      $(document).scrollTop($(this).offset().top - scrollOffset);
    }
  }

  $(function() {
    var tabs = ['cdap-cli'];
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral65 .example-tab-" + tab).click(change_tabbedparsedliteral65_ExampleTab(tab));
    }
  });

</script>
<div id="tabbedparsedliteral65" class="tabbed-parsed-literal independent">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-cdap-cli active"><a href="#">CDAP CLI</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-cdap-cli active">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="go">cdap &gt; describe artifact properties custom-transforms 1.0.0 [system | user]</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>If you deployed the <code class="docutils literal notranslate"><span class="pre">custom-transforms</span></code> artifact as a system artifact, the scope is <code class="docutils literal notranslate"><span class="pre">system</span></code>.
If you deployed the <code class="docutils literal notranslate"><span class="pre">custom-transforms</span></code> artifact as a user artifact, the scope is <code class="docutils literal notranslate"><span class="pre">user</span></code>.</p>
<p>You can verify that the plugins in your newly-added artifact are available to its parent by using the
<span class="xref std std-ref">Artifact HTTP RESTful API</span> to list plugins of a
specific type. For example, to check if <code class="docutils literal notranslate"><span class="pre">cdap-data-pipeline</span></code> can access the plugins in the
<code class="docutils literal notranslate"><span class="pre">custom-transforms</span></code> artifact:</p>

<script type="text/javascript">

  $(function tabbedparsedliteral66() {
    var tabs = ['linux', 'windows'];
    var mapping = {'windows': 'windows', 'linux': 'linux'};
    var tabSetID = 'linux-windows';
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral66 .example-tab-" + tab).click(changeExampleTab(tab, mapping, "tabbedparsedliteral66", tabSetID));
    }
  });

</script>
<div id="tabbedparsedliteral66" class="tabbed-parsed-literal dependent-linux-windows">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-linux active"><a href="#">Linux</a></li>
<li class="example-tab example-tab-windows "><a href="#">Windows</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-linux active">
<div class="code code-tab">
<div class="highlight-console">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">$</span> curl -w<span class="s2">&quot;\n&quot;</span> -X GET <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/cdap-data-pipeline/versions/6.1.1/extensions/transform?scope=system&quot;</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
<div class="tab-pane tab-pane-windows ">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="gp">&gt;</span> curl -X GET <span class="s2">&quot;localhost:11015/v3/namespaces/default/artifacts/cdap-data-pipeline/versions/6.1.1/extensions/transform?scope=system&quot;</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>Using the CLI:</p>

<script type="text/javascript">

  function change_tabbedparsedliteral67_ExampleTab(tab) {
    return function(e) {
      e.preventDefault();
      var scrollOffset = $(this).offset().top - $(document).scrollTop();
      $("#tabbedparsedliteral67 .tab-pane").removeClass("active");
      $("#tabbedparsedliteral67 .tab-pane-" + tab).addClass("active");
      $("#tabbedparsedliteral67 .example-tab").removeClass("active");
      $("#tabbedparsedliteral67 .example-tab-" + tab).addClass("active");
      $(document).scrollTop($(this).offset().top - scrollOffset);
    }
  }

  $(function() {
    var tabs = ['cdap-cli'];
    for (var i = 0; i < tabs.length; i++) {
      var tab = tabs[i];
      $("#tabbedparsedliteral67 .example-tab-" + tab).click(change_tabbedparsedliteral67_ExampleTab(tab));
    }
  });

</script>
<div id="tabbedparsedliteral67" class="tabbed-parsed-literal independent">
<ul class="tabbed-parsed-literal nav-tabs">
<li class="example-tab example-tab-cdap-cli active"><a href="#">CDAP CLI</a></li>
</ul>

<div class="tab-contents">

<div class="tab-pane tab-pane-cdap-cli active">
<div class="code code-tab">
<div class="highlight-shell-session">
<!-- tabbed-parsed-literal start -->
<div class="highlight"><pre><span></span><span class="go">cdap &gt; list artifact plugins cdap-data-pipeline 6.1.1 transform system</span>
</pre></div>
<!-- tabbed-parsed-literal end --></div>
</div>
</div>
</div>
</div>
<p>You can then check the list returned to see if your transforms are in the list. Note that
the scope here refers to the scope of the parent artifact. In this example it is the <code class="docutils literal notranslate"><span class="pre">system</span></code>
scope because <code class="docutils literal notranslate"><span class="pre">cdap-data-pipeline</span></code> is a system artifact. This is true even if you deployed
<code class="docutils literal notranslate"><span class="pre">custom-transforms</span></code> as a user artifact because the parent is still a system artifact.</p>
</div>
</div>
<div class="section" id="deploying-third-party-jars">
<span id="cdap-pipelines-plugin-management-third-party-plugins"></span><h2>Deploying Third-Party JARs<a class="headerlink" href="#deploying-third-party-jars" title="Permalink to this headline">🔗</a></h2>
<p><strong>Prebuilt JARs:</strong> In a case where you’d like to use pre-built third-party JARs (such as a
JDBC driver) as a plugin, you will need to create a JSON file to describe the JAR.</p>
<p>For information on the format of the JSON, please refer to the sections on
<a class="reference internal" href="../building-blocks/plugins.html#plugins-third-party"><span class="std std-ref">Third-Party Plugins</span></a> and <a class="reference internal" href="../building-blocks/plugins.html#plugins-deployment"><span class="std std-ref">Plugin Deployment</span></a>.</p>
<p>A sample JDBC Driver Plugin configuration:</p>
<div class="highlight container">
<pre class="literal-block">
{
  &quot;parents&quot;: [ &quot;cdap-data-pipeline[6.1.1,6.1.1]&quot; ],
  &quot;plugins&quot;: [
    {
      &quot;name&quot; : &quot;mysql&quot;,
      &quot;type&quot; : &quot;jdbc&quot;,
      &quot;className&quot; : &quot;com.mysql.jdbc.Driver&quot;,
      &quot;description&quot; : &quot;Plugin for MySQL JDBC driver&quot;
    },
    {
      &quot;name&quot; : &quot;postgresql&quot;,
      &quot;type&quot; : &quot;jdbc&quot;,
      &quot;className&quot; : &quot;org.postgresql.Driver&quot;,
      &quot;description&quot; : &quot;Plugin for PostgreSQL JDBC driver&quot;
    }
  ]
}
</pre>
</div>
</div>
<div class="section" id="managing-multiple-versions">
<span id="cdap-pipelines-plugin-management-multiple-versions"></span><h2>Managing Multiple Versions<a class="headerlink" href="#managing-multiple-versions" title="Permalink to this headline">🔗</a></h2>
<p>Different versions of the same plugin (or artifact) can be loaded and available at the
same time. These will appear in the <a class="reference internal" href="studio.html#cdap-studio"><span class="std std-ref">CDAP Studio</span></a> as
possible choices when selecting a plugin or creating a <a class="reference internal" href="studio.html#cdap-studio-plugin-templates"><span class="std std-ref">plugin template</span></a>. If no version is specified for a plugin in the
<a class="reference internal" href="developing-pipelines.html#cdap-pipelines-developing-pipelines-configuration-file-format"><span class="std std-ref">configuration file</span></a> used
to create an application, the highest version currently available in the system will be
used.</p>
</div>
<div class="section" id="deleting-plugins">
<span id="cdap-pipelines-plugin-management-deleting-plugins"></span><h2>Deleting Plugins<a class="headerlink" href="#deleting-plugins" title="Permalink to this headline">🔗</a></h2>
<p>Plugins can be deleted using either the <span class="xref std std-ref">Artifact HTTP RESTful API</span> or
the <span class="xref std std-ref">CDAP CLI</span>.</p>
<p>In the case of the CDAP CLI, only plugins that have been deployed in the <code class="docutils literal notranslate"><span class="pre">user</span></code> scope
can be deleted by the CDAP CLI. Both <code class="docutils literal notranslate"><span class="pre">system</span></code> and <code class="docutils literal notranslate"><span class="pre">user</span></code> scope plugins can be deleted
using the HTTP RESTful API by using the appropriate calls.</p>
<p>Note that in all cases, the actual files (JARs and JSON files) associated with the plugins
are not deleted. Instead, the references to them are deleted in the CDAP system. If the
files are not removed after these references are deleted, then—in the case of the
<code class="docutils literal notranslate"><span class="pre">system</span></code> scope plugins—, the artifacts will be reloaded the next time CDAP is
restarted, as they are automatically loaded at startup from the <a class="reference internal" href="#cdap-pipelines-plugin-management-deployment-deploying-as-a-system-artifact"><span class="std std-ref">appropriate directory</span></a>.</p>
</div>
</div>

</div>
    <div class="col-md-2">
      <div id="right-sidebar" class="bs-sidenav scrollable-y" role="complementary">
        <div id="localtoc-scrollspy">
        </div>
      </div>
    </div></div>
</div>
<!-- block main content end -->
<!-- block footer -->
<footer class="footer">
      <div class="container">
        <div class="row">
          <div class="col-md-2 footer-left"><a title="Running Pipelines" href="running-pipelines.html" />Previous</a></div>
          <div class="col-md-8 footer-center"><a class="footer-tab-link" href="../table-of-contents/../../reference-manual/licenses/index.html">Copyright</a> &copy; 2014-2020 Cask Data, Inc.&bull; <a class="footer-tab-link" href="//docs.cask.co/cdap/6.1.1/cdap-docs-6.1.1-web.zip" rel="nofollow">Download</a> an archive or
<a class="footer-tab-link" href="//docs.cask.co/cdap">switch the version</a> of the documentation
          </div>
          <div class="col-md-2 footer-right"><a title="Plugin Reference" href="plugins/index.html" />Next</a></div>
        </div>
      </div>
    </footer>
<!-- block footer end -->
<script type="text/javascript" src="../_static/bootstrap-3.3.6/js/bootstrap.min.js"></script><script type="text/javascript" src="../_static/js/bootstrap-sphinx.js"></script><script type="text/javascript" src="../_static/js/abixTreeList-2.js"></script><script type="text/javascript" src="../_static/js/cdap-dynamicscrollspy-4.js"></script><script type="text/javascript" src="../_static/js/cdap-version-menu.js"></script><script type="text/javascript" src="../_static/js/copy-to-clipboard.js"></script><script type="text/javascript" src="../_static/js/jquery.mousewheel.min.js"></script><script type="text/javascript" src="../_static/js/jquery.mCustomScrollbar.js"></script><script type="text/javascript" src="../_static/js/js.cookie.js"></script><script type="text/javascript" src="../_static/js/tabbed-parsed-literal-0.2.js"></script><script type="text/javascript" src="../_static/js/cdap-onload-javascript.js"></script><script type="text/javascript" src="../_static/js/cdap-version-menu.js"></script>
    <script src="https://cdap.gitee.io/docs/cdap/json-versions.js"/></script>
  </body>
</html>